package top.yuhaitao;

import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;

import sun.misc.BASE64Encoder;

public class RSAKeyGenerator {

	public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
		// 创建‘密匙对’生成器
		KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");

		// 密钥对采用的长度决定了加密块的长度，我这里取的是2048，即256byte ，由于加密块的长度固定为256，因此明文的长度至多为256 - 11 =
		// 245byte
		kpg.initialize(2048);

		// 生成‘密匙对’，其中包含着一个公匙和一个私匙的信息
		KeyPair kp = kpg.genKeyPair();

		// 获得公匙
		PublicKey public_key = kp.getPublic();

		// 获得私匙
		PrivateKey private_key = kp.getPrivate();

		// 输出公匙
		System.out.println("public key:");
		String publicKey = new BASE64Encoder().encode(public_key.getEncoded());
		System.out.println(publicKey);

		// 输出私匙
		System.out.println("private key:");
		String privateKey = new BASE64Encoder().encode(private_key.getEncoded());
		System.out.println(privateKey);

		/**
		 * 验证
		 */
		String data = "123";

		String encrypt = AsymmtricCryptoUtil.encrypt(data, publicKey);
		String decrypt = AsymmtricCryptoUtil.decrypt(encrypt, privateKey);
		System.out.println(decrypt.equals(data));

	}
}
